/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.bitoon.basketdudes.ws;

import com.bitoon.basketdudes.jpa.Carta;
import com.bitoon.basketdudes.jpa.CartaObjeto;
import com.bitoon.basketdudes.jpa.Categoria;
import com.bitoon.basketdudes.jpa.CategoriaTalentoModeloJugador;
import com.bitoon.basketdudes.jpa.Coleccion;
import com.bitoon.basketdudes.jpa.Equipo;
import com.bitoon.basketdudes.jpa.Escuela;
import com.bitoon.basketdudes.jpa.Gashaball;
import com.bitoon.basketdudes.jpa.GashaballPack;
import com.bitoon.basketdudes.jpa.Gashaballitem;
import com.bitoon.basketdudes.jpa.MCarta;
import com.bitoon.basketdudes.jpa.MJugador;
import com.bitoon.basketdudes.jpa.MJugadorTrait;
import com.bitoon.basketdudes.jpa.Marca;
import com.bitoon.basketdudes.jpa.Objeto;
import com.bitoon.basketdudes.jpa.PersistenceManager;
import com.bitoon.basketdudes.jpa.Region;
import com.bitoon.basketdudes.jpa.RegionZona;
import com.bitoon.basketdudes.jpa.Ropa;
import com.bitoon.basketdudes.jpa.Sobre;
import com.bitoon.basketdudes.jpa.Talento;
import com.bitoon.basketdudes.jpa.Trait;
import com.bitoon.basketdudes.jpa.Zona;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import org.jdom.output.XMLOutputter;
import org.jdom.Document;
import org.jdom.Element;


/**
 * @author pacoFELC
 * 2013
 */
public class TiendaXML {
    EntityManagerFactory emfTienda = null;
    Configuracion        conf = null;
    Logger               log = Logger.getLogger(Tienda.class);

    public TiendaXML() {
        try {
            // JPA Units
            emfTienda = PersistenceManager.getInstance().getEntityManagerFactory("jpa_basket");
        } catch (Exception e) {
            log.error("[ERROR][constructor]: No se puedo conectar a la base de datos: " , e);
        }
    }
    
    
    public String consultarCategoria ( HttpServletRequest request, HttpServletResponse response) {

        EntityManager   em          = null;
        XMLOutputter    out         = null;
        Document        doc         = null;
        Query           q           = null; 
        int             error       = 0;
        int             idCategoria = 0;

        try {
            em= emfTienda.createEntityManager(); 

            // Si no se envía parametro se busca la categoría raiz 
            if ( request.getParameter("idCategoria") != null ) {
                idCategoria = Integer.parseInt(request.getParameter("idCategoria"));

                q = em.createNamedQuery("Objeto.findByPadreId");
                q.setParameter("padreId", idCategoria);
            } else {
                q = em.createNamedQuery("Categoria.findAll");
            }
            List<Categoria> lista = q.getResultList();

            if (lista.isEmpty()) {
log.debug("[TRAZA][NO hay categorias asociadas]: " + idCategoria);
               error=-1; // No encontrado
            }

            // componemos el xml 
            Element root=new Element("consultarCategorias");
            Element el_error=new Element("err");
            el_error.setAttribute("cod",new Integer(error).toString());
            root.addContent(el_error);
            if ( error == 0) {
                for ( int i=0;i< lista.size(); i++) {
                    Categoria row = lista.get(i);

                    Element elemento=new Element("categoria");
                    elemento.setAttribute("id",           String.valueOf(row.getId         ()));
                    elemento.setAttribute("nombre",       String.valueOf(row.getNombre     ()));
                    elemento.setAttribute("descripcion",  String.valueOf(row.getDescripcion()));
                    elemento.setAttribute("padre_id",     String.valueOf(row.getPadreId    ()));

                    root.addContent(elemento);
                }
            }
            doc=new Document(root);//Creamos el documento

            doc.setDocType(null);

            out=new XMLOutputter();
        } catch (Exception e) {
            try { em.getTransaction().rollback(); } catch (Exception e2) { }
            log.error("[consultarCategoria]: " , e);
//            pintarStackTrace(e.getStackTrace());

        } finally {
            try { em.close(); } catch (Exception e) { }
        }

        return out.outputString(doc);
    }

    public String consultarObjeto ( HttpServletRequest request, HttpServletResponse response) {

        EntityManager   em          = null;
        XMLOutputter    out         = null;
        Document        doc         = null;
        Query           q           = null;
        int             error       = 0;
        int             id          = 0;
        int             categoriaId = 0;

        try {
            em= emfTienda.createEntityManager(); 

            // Si se envía el identificador de un artículo se busca por el
            if ( request.getParameter("id") != null ) {
                id = Integer.parseInt(request.getParameter("id"));
                q = em.createNamedQuery("Objeto.findById");
                q.setParameter("id", id);
            } else {
                // Si no se envía parametro se busca la categoría raiz 
                if ( request.getParameter("idCategoria") != null ) {
                    categoriaId = Integer.parseInt(request.getParameter("idCategoria"));
                    q = em.createNamedQuery("Objeto.findByCategoriaId");
                    q.setParameter("categoriaId", categoriaId);
                } else {
                    q = em.createNamedQuery("Objeto.findAll");
                }
            }
            List<Objeto> lista = q.getResultList();

            if (lista.isEmpty()) {
log.debug("[TRAZA][NO hay objetos] ");
               error=-1; // No encontrado
            }

            // componemos el xml 
            Element root=new Element("consultarObjetos");
            Element el_error=new Element("err");
            el_error.setAttribute("cod",new Integer(error).toString());
            root.addContent(el_error);
            if ( error == 0) {
                for ( int i=0;i< lista.size(); i++) {
                    Objeto row = lista.get(i);

                    Element elemento=new Element("objeto");

                    elemento.setAttribute("id",           String.valueOf(row.getId          ()));
                    elemento.setAttribute("nombre",       String.valueOf(row.getNombre      ()));
                    elemento.setAttribute("categoria_id", String.valueOf(row.getCategoria().getId ()));
                    elemento.setAttribute("coleccion_id", String.valueOf(row.getColeccion().getId ()));
                    elemento.setAttribute("precio",       String.valueOf(row.getPrecio      ()));
                    elemento.setAttribute("puntos",       String.valueOf(row.getPuntos      ()));
                    elemento.setAttribute("nivel",        String.valueOf(row.getNivel       ()));
                    elemento.setAttribute("stock_total",  String.valueOf(row.getStockTotal  ()));
                    elemento.setAttribute("vendidas",     String.valueOf(row.getVendidas    ()));
                    elemento.setAttribute("devueltas",    String.valueOf(row.getDevueltas   ()));
                    elemento.setAttribute("f_fin",        String.valueOf(row.getFFin        ()));
                    elemento.setAttribute("uds_equipo",   String.valueOf(row.getUdsEquipo   ()));

                    root.addContent(elemento);
                }
            }
            doc=new Document(root);//Creamos el documento

            doc.setDocType(null);

            out=new XMLOutputter();
        } catch (Exception e) {
            try { em.getTransaction().rollback(); } catch (Exception e2) { }
            log.error("[consultarObjeto]: " , e);
//            pintarStackTrace(e.getStackTrace());

        } finally {
            try { em.close(); } catch (Exception e) { } 
        }

        return out.outputString(doc);
    }

    public String consultarTienda ( HttpServletRequest request, HttpServletResponse response) {
        EntityManager   em          = null;
        XMLOutputter    out         = null;
        Document        doc         = null;
        int             error       = 0;
        short           id          = 0;

        try {
log.debug("[TRAZA][Creo el entity Manager]");
            em= emfTienda.createEntityManager(); 

            // componemos el xml 
            Element root=new Element("consultarTienda");
            root.setAttribute("err", new Integer(error).toString());

            {
                // Buscamos todos los jugadores porque ahora puede haber jugadores
                // que no se puedan comprar pero que los usuarios los tengan como dark casanova
                Query q = em.createNamedQuery("MJugador.findActivosyOcultos");
                List<MJugador> lista = q.getResultList();

                if (!lista.isEmpty()) {
log.debug("[TRAZA][Lista Modelo Jugadores]");

                    for ( int i=0;i< lista.size(); i++) {
                        MJugador row = lista.get(i);

                        Element elemento=new Element("jugador");

                        elemento.setAttribute("id",             String.valueOf(row.getId            ()));
                        elemento.setAttribute("alias",          String.valueOf(row.getNombre        ()));
                        elemento.setAttribute("nombre_real",    String.valueOf(row.getNombreReal    ()));
                        elemento.setAttribute("apellido_real",  String.valueOf(row.getApellidoReal  ()));
                        elemento.setAttribute("escuela_id",     String.valueOf(row.getEscuela().getId()));
                        elemento.setAttribute("posicion1",      String.valueOf(row.getPosicion1     ()));
                        elemento.setAttribute("estado",         String.valueOf(row.getEstado                ()));

                        // Caracteristicas del jugador 
                        elemento.setAttribute("t1",             String.valueOf(row.getT1            ()));
                        elemento.setAttribute("t2",             String.valueOf(row.getT2            ()));
                        elemento.setAttribute("t3",             String.valueOf(row.getT3            ()));
                        elemento.setAttribute("agresividad",    String.valueOf(row.getAgresividad   ()));
                        elemento.setAttribute("driblin",        String.valueOf(row.getDriblin       ()));
                        elemento.setAttribute("pase",           String.valueOf(row.getPase          ()));
                        elemento.setAttribute("rebote_ataque",  String.valueOf(row.getReboteAtaque  ()));
                        elemento.setAttribute("rebote_defensa", String.valueOf(row.getReboteDefensa ()));
                        elemento.setAttribute("defensa",        String.valueOf(row.getDefensa       ()));
                        elemento.setAttribute("robo",           String.valueOf(row.getRobo          ()));
                        elemento.setAttribute("tapon",          String.valueOf(row.getTapon         ()));
                        elemento.setAttribute("resistencia",    String.valueOf(row.getResistencia   ()));
                        elemento.setAttribute("velocidad",      String.valueOf(row.getVelocidad     ()));
                        elemento.setAttribute("sprint",         String.valueOf(row.getSprint        ()));
                        elemento.setAttribute("teamwork",       String.valueOf(row.getTeamwork      ()));

                        elemento.setAttribute("precio",         String.valueOf(row.getPrecio        ()));
                        elemento.setAttribute("puntos",         String.valueOf(row.getPuntos        ()));
                        elemento.setAttribute("nivel",          String.valueOf(row.getNivel         ()));
                        elemento.setAttribute("nivel_ini",      String.valueOf(row.getNivelIni      ()));
                        elemento.setAttribute("nombre_interno", String.valueOf(row.getNombreInterno ()));
                        elemento.setAttribute("eti",            String.valueOf(row.getEtiqueta      ()));
                        if ( row.getTrait() != null ) {
                            elemento.setAttribute("trait",      String.valueOf(row.getTrait().getId ()));                            
                        }
                        
                        root.addContent(elemento);
                    }
                }
            }
            {
log.debug("[TRAZA][Lista Marcas]");
                Query q = em.createNamedQuery("Marca.findAll");
                List<Marca> lista = q.getResultList();

                if (!lista.isEmpty()) {
                    for ( int i=0;i< lista.size(); i++) {
                        Marca row = lista.get(i);

                        Element elemento=new Element("marca");

                        elemento.setAttribute("id",                 String.valueOf(row.getId            ()));
                        elemento.setAttribute("nombre",             String.valueOf(row.getNombre        ()));

                        root.addContent(elemento);
                    }
                }
            }
            {
log.debug("[TRAZA][Lista Colecciones]");
                Query q = em.createNamedQuery("Coleccion.findAll");
                List<Coleccion> lista = q.getResultList();

                if (!lista.isEmpty()) {
                    for ( int i=0;i< lista.size(); i++) {
                        Coleccion row = lista.get(i);

                        Element elemento=new Element("coleccion");

                        elemento.setAttribute("id",                 String.valueOf(row.getId            ()));
                        elemento.setAttribute("nombre",             String.valueOf(row.getNombre        ()));
                        elemento.setAttribute("marca_id",           String.valueOf(row.getMarcaId       ()));
                        root.addContent(elemento);
                    }
                }
            }

            {
log.debug("[TRAZA][Lista Escuelas]");
                Query q = em.createNamedQuery("Escuela.findAll");
                List<Escuela> lista = q.getResultList();

                if (!lista.isEmpty()) {
                    for ( int i=0;i< lista.size(); i++) {
                        Escuela row = lista.get(i);

                        Element elemento=new Element("escuela");

                        elemento.setAttribute("id",                 String.valueOf(row.getId            ()));
                        elemento.setAttribute("nombre",             String.valueOf(row.getNombre        ()));

                        root.addContent(elemento);
                    }
                }
            }

            {
log.debug("[TRAZA][Lista Sobres]");
                Query q = em.createNamedQuery("Sobre.findAll");
                List<Sobre> lista = q.getResultList();

                if (!lista.isEmpty()) {
                    for ( int i=0;i< lista.size(); i++) {
                        Sobre row = lista.get(i);

                        Element elemento=new Element("sobre");

                        elemento.setAttribute("id",             String.valueOf(row.getId            ()));
                        elemento.setAttribute("nombre",         String.valueOf(row.getNombre        ()));
                        elemento.setAttribute("categoria_id",   String.valueOf(row.getCategoriaId   ()));

                        // Atributos comunes de la tienda 
                        elemento.setAttribute("estado",         String.valueOf(row.getEstado        ()));
                        elemento.setAttribute("precio",         String.valueOf(row.getPrecio        ()));
                        elemento.setAttribute("puntos",         String.valueOf(row.getPuntos        ()));
                        elemento.setAttribute("nivel",          String.valueOf(row.getNivel         ()));
                        elemento.setAttribute("eti",            String.valueOf(row.getEtiqueta      ()));

                        root.addContent(elemento);
                    }
                }
            }
            {
log.debug("[TRAZA][Lista Gashaball]");
                Query q = em.createNamedQuery("Gashaball.findAll");
                List<Gashaball> lista = q.getResultList();

                if (!lista.isEmpty()) {
                    for ( int i=0;i< lista.size(); i++) {
                        Gashaball row = lista.get(i);

                        Element elemento=new Element("gashaball");

                        elemento.setAttribute("id",             String.valueOf(row.getId            ()));
                        elemento.setAttribute("nombre",         String.valueOf(row.getNombre        ()));
                        elemento.setAttribute("categoria_id",   String.valueOf(row.getCategoriaId   ()));

                        // Atributos comunes de la tienda 
                        elemento.setAttribute("estado",         String.valueOf(row.getEstado        ()));
                        elemento.setAttribute("precio",         String.valueOf(row.getPrecio        ()));
                        elemento.setAttribute("puntos",         String.valueOf(row.getPuntos        ()));
                        elemento.setAttribute("nivel",          String.valueOf(row.getNivel         ()));
                        elemento.setAttribute("eti",            String.valueOf(row.getEtiqueta      ()));

                        root.addContent(elemento);
                    }
                }
            }
            {
log.debug("[TRAZA][Lista GashaballPack]");
                Query q = em.createNamedQuery("GashaballPack.findAll");
                List<GashaballPack> lista = q.getResultList();

                if (!lista.isEmpty()) {
                    for ( int i=0;i< lista.size(); i++) {
                        GashaballPack row = lista.get(i);

                        Element elemento=new Element("gashaballpack");

                        elemento.setAttribute("id",             String.valueOf(row.getId            ()));
                        elemento.setAttribute("nombre",         String.valueOf(row.getNombre        ()));
                        elemento.setAttribute("categoria_id",   String.valueOf(row.getCategoriaId   ()));

                        // Atributos comunes de la tienda 
                        elemento.setAttribute("estado",         String.valueOf(row.getEstado        ()));
                        elemento.setAttribute("precio",         String.valueOf(row.getPrecio        ()));
                        elemento.setAttribute("puntos",         String.valueOf(row.getPuntos        ()));
                        elemento.setAttribute("nivel",          String.valueOf(row.getNivel         ()));
                        elemento.setAttribute("cantidad",       String.valueOf(row.getCantidad      ()));
                        elemento.setAttribute("gid",            String.valueOf(row.getGashaball().getId()));
                        elemento.setAttribute("eti",            String.valueOf(row.getEtiqueta      ()));

                        root.addContent(elemento);
                    }
                }
            }

            {
log.debug("[TRAZA][Lista Objeto]");
                Query q = em.createNamedQuery("Objeto.findAll");
                List<Objeto> lista = q.getResultList();

                if (!lista.isEmpty()) {
                    for ( int i=0;i< lista.size(); i++) {
                        Objeto row = lista.get(i);

                        Element elemento=new Element("objeto");

                        elemento.setAttribute("id",                 String.valueOf(row.getId                ()));
                        elemento.setAttribute("nombre",             String.valueOf(row.getNombre            ()));
                        if ( row.getColeccion() != null)
                            elemento.setAttribute("coleccion_id",   String.valueOf(row.getColeccion().getId ()));
                        elemento.setAttribute("tipo",               String.valueOf(row.getTipo              ()));

                        // Atributos comunes de la tienda
                        elemento.setAttribute("estado",         String.valueOf(row.getEstado        ()));
                        elemento.setAttribute("precio",         String.valueOf(row.getPrecio        ()));
                        elemento.setAttribute("puntos",         String.valueOf(row.getPuntos        ()));
                        elemento.setAttribute("nivel",          String.valueOf(row.getNivel         ()));
                        elemento.setAttribute("eti",            String.valueOf(row.getEtiqueta      ()));

                        root.addContent(elemento);
                    }
                }
            }


            {
log.debug("[TRAZA][Lista Gashaballitem]");
                Query q = em.createNamedQuery("Gashaballitem.findAll");
                List<Gashaballitem> lista = q.getResultList();

                if (!lista.isEmpty()) {
                    for ( int i=0;i< lista.size(); i++) {
                        Gashaballitem row = lista.get(i);

                        Element elemento=new Element("gashaballitem");

                        elemento.setAttribute("gashaball_id"    ,       String.valueOf(row.getGashaballId   ()));
                        elemento.setAttribute("item_type"       ,       String.valueOf(row.getItemType      ()));
                        elemento.setAttribute("item_id"         ,       String.valueOf(row.getItemId        ()));

                        root.addContent(elemento);
                    }
                }
            }
            {
                log.debug("[TRAZA][Lista Uniformes]");
                Query q = em.createNamedQuery("CartaObjeto.findAll");
                List<CartaObjeto> lista = q.getResultList();

                if (!lista.isEmpty()) {
                    for ( int i=0;i< lista.size(); i++) {
                        CartaObjeto row = lista.get(i);

                        Element elemento=new Element("cu");

                        elemento.setAttribute("c"  , String.valueOf(row.getCarta().getId()));
                        elemento.setAttribute("t"  , String.valueOf(row.getObjectType()));
                        elemento.setAttribute("k"  , String.valueOf(row.getObjectId()));

                        root.addContent(elemento);
                    }
                }
            }
            {
                log.debug("[TRAZA][Trait]");
                Query q = em.createNamedQuery("Trait.findAll");
                List<Trait> lista = q.getResultList();

                if (!lista.isEmpty()) {
                    for ( int i=0;i< lista.size(); i++) {
                        Trait row = lista.get(i);

                        Element elemento=new Element("trait");
                        
                        // Atributos comunes de la tienda
                        elemento.setAttribute("id",          String.valueOf(row.getId           ()));
                        elemento.setAttribute("est",         String.valueOf(row.getEstado       ()));
                        elemento.setAttribute("bit",         String.valueOf(row.getPrecio       ()));
                        elemento.setAttribute("dud",         String.valueOf(row.getPuntos       ()));
                        elemento.setAttribute("lvl",         String.valueOf(row.getNivel        ()));
                        elemento.setAttribute("lbl",         String.valueOf(row.getEtiqueta     ()));

                        // Atributos del trait para el cliente
                        elemento.setAttribute("dur",         String.valueOf(row.getDuracion     ()));                        

                        root.addContent(elemento);
                    }
                }
            }
            {
                log.debug("[TRAZA][Lista MJugadorTrait]");
                Query q = em.createNamedQuery("MJugadorTrait.findAll");
                List<MJugadorTrait> lista = q.getResultList();

                if (!lista.isEmpty()) {
                    for ( int i=0;i< lista.size(); i++) {
                        MJugadorTrait row = lista.get(i);

                        Element elemento=new Element("trait_mjug");

                        elemento.setAttribute("trait"    , String.valueOf(row.getTraitId     ()));
                        elemento.setAttribute("mjug"     , String.valueOf(row.getMJugadorId  ()));

                        root.addContent(elemento);
                    }
                }
            }

            doc=new Document(root);//Creamos el documento
            doc.setDocType(null);

            out=new XMLOutputter();
        } catch (Exception e) {
            log.error("[ERROR][consultarTienda]: ", e);
            try { em.getTransaction().rollback(); } catch (Exception e2) { }
        } finally {
            try { em.close(); } catch (Exception e) { } 
        }

log.debug("[TRAZA][No Error]" + out.outputString(doc));
        return out.outputString(doc);
    }

    public String consultarCartas ( HttpServletRequest request, HttpServletResponse response) {
        EntityManager   em          = null;
        XMLOutputter    out         = null;
        Document        doc         = null;
        int             error       = 0;
        short           id          = 0;

log.debug("[consultarCartas Inicio]: " );

        try {
            em = emfTienda.createEntityManager(); 

            // componemos el xml 
            Element root=new Element("consultarCartas");
            root.setAttribute("err", new Integer(error).toString());

            Query q = em.createNamedQuery("Carta.findActivasyOcultas");
            List<Carta> lista = q.getResultList();

            if (!lista.isEmpty()) {
                for ( int i=0;i< lista.size(); i++) {
                    Carta row = lista.get(i);

                    Element elemento = new Element("carta");

                    elemento.setAttribute("id",                     String.valueOf(row.getId                        ()));
                    // Atributos del modelo 
                    elemento.setAttribute("modelo_carta_id",        String.valueOf(row.getMCarta().getId            ()));
                    // 501 - Permanente, 502 - Activada, 503 - Manager 
                    elemento.setAttribute("modelo_categoria_id",    String.valueOf(row.getMCarta().getCategoriaId   ()));

                    // Atributos de la carta 
                    elemento.setAttribute("categoria_id",   String.valueOf(row.getCategoriaId   ()));
                    elemento.setAttribute("duracion",       String.valueOf(row.getDuracion      ()));
                    elemento.setAttribute("rareza",         String.valueOf(row.getRareza        ()));
                    elemento.setAttribute("resumen",        String.valueOf(row.getResumen       ()));
                    elemento.setAttribute("cuartos",        String.valueOf(row.getCuartos       ()));

                    // Atributos comunes de la tienda 
                    elemento.setAttribute("estado",         String.valueOf(row.getEstado        ()));
                    elemento.setAttribute("precio",         String.valueOf(row.getPrecio        ()));
                    elemento.setAttribute("puntos",         String.valueOf(row.getPuntos        ()));
                    elemento.setAttribute("nivel",          String.valueOf(row.getNivel         ()));
                    elemento.setAttribute("eti",            String.valueOf(row.getEtiqueta      ()));

                    elemento.setAttribute("efecto_tipo",    String.valueOf(row.getEfectoTipo    ()));
                    elemento.setAttribute("efecto_valor",   String.valueOf(row.getEfectoValor   ()));
                    root.addContent(elemento);
                }
            }

            doc=new Document(root);//Creamos el documento
            doc.setDocType(null);
            out=new XMLOutputter();
        } catch (Exception e) {
            try { em.getTransaction().rollback(); } catch (Exception e2) { }
            log.error("[consultarCartas]: " , e);
//            pintarStackTrace(e.getStackTrace());

        } finally {
            try { em.close(); } catch (Exception e) { } 
        }

        return out.outputString(doc);
    }

    public String consultarCartasServidor ( HttpServletRequest request, HttpServletResponse response) {
        EntityManager   em          = null;
        XMLOutputter    out         = null;
        Document        doc         = null;
        int             error       = 0;
        short           id          = 0;

log.debug("[consultarCartas Inicio]: " );

        try {
            em = emfTienda.createEntityManager(); 

            // componemos el xml 
            Element root=new Element("consultarCartas");
            root.setAttribute("err", new Integer(error).toString());

            Query q = em.createNamedQuery("Carta.findServidor");
            List<Carta> lista = q.getResultList();

            if (!lista.isEmpty()) {
                for ( int i=0;i< lista.size(); i++) {
                    Carta row = lista.get(i);

                    Element elemento = new Element("c");

                    elemento.setAttribute("id",         String.valueOf(row.getId                        ()));
                    // Atributos del modelo 
                    elemento.setAttribute("mod",        String.valueOf(row.getMCarta().getId            ()));
                    // 501 - Permanente, 502 - Activada, 503 - Manager 
                    elemento.setAttribute("m_cat",   String.valueOf(row.getMCarta().getCategoriaId   ()));

                    // Atributos de la carta 
                    elemento.setAttribute("cat",     String.valueOf(row.getCategoriaId   ()));
                    elemento.setAttribute("dur",        String.valueOf(row.getDuracion      ()));
                    elemento.setAttribute("qts",        String.valueOf(row.getCuartos       ()));
                    elemento.setAttribute("fx",         String.valueOf(row.getEfectoTipo    ()));
                    elemento.setAttribute("fxv",        String.valueOf(row.getEfectoValor   ()));
                    root.addContent(elemento);
                }
            }

            doc=new Document(root);//Creamos el documento
            doc.setDocType(null);
            out=new XMLOutputter();
        } catch (Exception e) {
            try { em.getTransaction().rollback(); } catch (Exception e2) { }
            log.error("[consultarCartas]: " , e);
        } finally {
            try { em.close(); } catch (Exception e) { } 
        }

        return out.outputString(doc);
    }


    // Consulta toda la ropa de la tienda ordenada por marca y coleccion 
    public String consultarTiendaRopa ( HttpServletRequest request, HttpServletResponse response) {
log.debug("[TRAZA][Entro en consultarTiendaRopa]");
        EntityManager   em          = null;
        XMLOutputter    out         = null;
        Document        doc         = null;
        int             error       = 0;

        try {
            log.debug("[TRAZA][Creo el entity Manager]");
            em = emfTienda.createEntityManager(); 

            // componemos el xml 
            Element root=new Element("consultarTienda");
            root.setAttribute("err", new Integer(error).toString());

            Query q = em.createNamedQuery("Ropa.findActivasyOcultas");
            List<Ropa> lista = q.getResultList();

            if (!lista.isEmpty()) {
                for ( int i=0;i< lista.size(); i++) {
                    Ropa row = lista.get(i);

                    Element elemento=new Element("ropa");

                    elemento.setAttribute("id",                 String.valueOf(row.getId                    ()));
                    elemento.setAttribute("estado",             String.valueOf(row.getEstado                ()));
                    elemento.setAttribute("nombre",             String.valueOf(row.getNombre                ()));
                    elemento.setAttribute("mar_id",             String.valueOf(row.getMarca().getId         ()));
                    elemento.setAttribute("cat_id",             String.valueOf(row.getCategoria().getId     ()));
                    elemento.setAttribute("nom_categoria",      String.valueOf(row.getCategoria().getNombre ()));
                    elemento.setAttribute("coleccion_id",       String.valueOf(row.getColeccion().getId     ()));
                    elemento.setAttribute("modelo",             String.valueOf(row.getModelo                ()));
                    elemento.setAttribute("textura",            String.valueOf(row.getTextura               ()));

                    elemento.setAttribute("precio",             String.valueOf(row.getPrecio    ()));
                    elemento.setAttribute("puntos",             String.valueOf(row.getPuntos    ()));
                    elemento.setAttribute("nivel",              String.valueOf(row.getNivel     ()));
                    elemento.setAttribute("eti",                String.valueOf(row.getEtiqueta      ()));

                    elemento.setAttribute("prop1",              String.valueOf(row.getProp1     ()));
                    elemento.setAttribute("valor1",             String.valueOf(row.getValor1    ()));
                    elemento.setAttribute("modif1",             String.valueOf(row.getModif1    ()));

                    elemento.setAttribute("prop2",              String.valueOf(row.getProp2     ()));
                    elemento.setAttribute("valor2",             String.valueOf(row.getValor2    ()));
                    elemento.setAttribute("modif2",             String.valueOf(row.getModif2    ()));

                    elemento.setAttribute("prop3",              String.valueOf(row.getProp3     ()));
                    elemento.setAttribute("valor3",             String.valueOf(row.getValor3    ()));
                    elemento.setAttribute("modif3",             String.valueOf(row.getModif3    ()));

                    elemento.setAttribute("prop4",              String.valueOf(row.getProp4     ()));
                    elemento.setAttribute("valor4",             String.valueOf(row.getValor4    ()));
                    elemento.setAttribute("modif4",             String.valueOf(row.getModif4    ()));

                    elemento.setAttribute("usos",               String.valueOf(row.getUsos      ()));
                    elemento.setAttribute("dias",               String.valueOf(row.getDias      ()));
                    
                    root.addContent(elemento);
                }
            }
            doc=new Document(root);//Creamos el documento
            doc.setDocType(null);

            out=new XMLOutputter();
        } catch (Exception e) {
            try { em.getTransaction().rollback(); } catch (Exception e2) { }
            log.error("[consultarRopa]: " , e);
        } finally {
            try { em.close(); } catch (Exception e) { } 
        }

        return out.outputString(doc);
    }

    public String consultarSaldoEquipo ( HttpServletRequest request, HttpServletResponse response) {

        EntityManager   em          = null;
        XMLOutputter    out         = null;
        Document        doc         = null;
        int             error       = 0;
        int             equipo_id  = -1;

        log.debug("[TRAZA][Entro en consultarTiendaRopa. OJO este WS tendría que ser privado]");

        try {
            log.debug("[TRAZA][Creo el entity Manager]");

            em = emfTienda.createEntityManager(); 

            // componemos el xml 
            Element root=new Element("consultarSaldoEquipo");
            root.setAttribute("err", new Integer(error).toString());

            Query  q = null;

            if ( request.getParameter("equipo_id") != null ) {
                equipo_id = Integer.parseInt(request.getParameter("equipo_id"));
                q = em.createNamedQuery("Equipo.findById");
                q.setParameter("idEquipo", equipo_id);
            } else {
                throw new ExcepcionGeneral( -3, "Falta el parametro equipo_id" );
            }

            // Comprobacion de Sesión 
            HttpSession miSesion = request.getSession(true);
            String idSesion = miSesion.getId();
            log.debug("[SESION]"+miSesion.getId());

            if (idSesion != null && equipo_id != 0 ) {
                LoginAction la = new LoginAction();
                int aux_usuario_id = la.comprobarSesionEquipo( idSesion, equipo_id, em );
                if ( aux_usuario_id <0 ) {
                    throw new ExcepcionGeneral( -4, "Sesión Incorrecta" );
                }
            }

            List<Equipo> lista = q.getResultList();
            if (!lista.isEmpty()) {
                for ( int i=0;i< lista.size(); i++) {
                    Equipo row = lista.get(i);

                    Element el_equipo=new Element("equipo");

                    el_equipo.setAttribute("equipo_id",          String.valueOf(row.getId            ()));
                    el_equipo.setAttribute("equipo_nombre",      String.valueOf(row.getNombre        ()));
                    el_equipo.setAttribute("equipo_nick",        String.valueOf(row.getNick          ()));
                    el_equipo.setAttribute("puntos",             String.valueOf(row.getPuntos        ()));
                    el_equipo.setAttribute("nivel",              String.valueOf(row.getNivel         ()));

                    el_equipo.setAttribute("usuario_id",         String.valueOf(row.getUsuario().getId       ()));
                    el_equipo.setAttribute("usuario_nick",       String.valueOf(row.getUsuario().getNick     ()));
                    el_equipo.setAttribute("usuario_creditos",   String.valueOf(row.getUsuario().getCreditos ()));

                    root.addContent(el_equipo);
                }
            }

            doc = new Document(root);//Creamos el documento
            doc.setDocType(null);
            out = new XMLOutputter();
        } catch (Exception e) {
            try { em.getTransaction().rollback(); } catch (Exception e2) { }
            log.error("[consultarSaldoEquipo]: " , e);
        } finally {
            try { em.close(); } catch (Exception e) { } 
        }

        return out.outputString(doc);
    }

    public String consultarTalentos ( HttpServletRequest request, HttpServletResponse response) {
        EntityManager   em          = null;
        XMLOutputter    out         = null;
        Document        doc         = null;
        int             error       = 0;
        short           id          = 0;

log.debug("[consultarTalentos Inicio]: " );

        try {
            em = emfTienda.createEntityManager(); 

            // componemos el xml
            Element root=new Element("consultarTalentos");
            root.setAttribute("err", new Integer(error).toString());

            Query q = em.createNamedQuery("Talento.findByTienda");
            List<Talento> lista = q.getResultList();

            if (!lista.isEmpty()) {
                for ( int i=0;i< lista.size(); i++) {
                    Talento row = lista.get(i);

                    Element elemento = new Element("talento");

                    elemento.setAttribute("id",             String.valueOf(row.getId                        ()));
                    elemento.setAttribute("nombre",         String.valueOf(row.getNombre()));
                    elemento.setAttribute("categoria_id",   String.valueOf(row.getCategoriaId   ()));
                    elemento.setAttribute("nivel",          String.valueOf(row.getNivel()));
                    elemento.setAttribute("nivel_equipo",   String.valueOf(row.getNivelEquipo()));
                    elemento.setAttribute("coste",          String.valueOf(row.getCoste()));
                    elemento.setAttribute("tipo",           String.valueOf(row.getTipo()));
                    elemento.setAttribute("recarga",        String.valueOf(row.getRecarga()));
                    elemento.setAttribute("duracion",       String.valueOf(row.getDuracion()));
                    elemento.setAttribute("efecto_tipo",    String.valueOf(row.getEfectoTipo()));
                    elemento.setAttribute("efecto_valor",   String.valueOf(row.getEfectoValor()));
                    root.addContent(elemento);
                }
            }

            doc=new Document(root);//Creamos el documento
            doc.setDocType(null);
            out=new XMLOutputter();
        } catch (Exception e) {
            try { em.getTransaction().rollback(); } catch (Exception e2) { }
            log.error("[consultarTalentos]: " , e);
        } finally {
            try { em.close(); } catch (Exception e) { } 
        }

        return out.outputString(doc);
    }

    public String consultarModeloTalento ( HttpServletRequest request, HttpServletResponse response) {
        EntityManager   em          = null;
        XMLOutputter    out         = null;
        Document        doc         = null;
        int             error       = 0;
        short           id          = 0;

log.debug("[consultarModeloTalento Inicio]: " );

        try {
            em = emfTienda.createEntityManager(); 

            // componemos el xml 
            Element root=new Element("consultarModeloTalento");
            root.setAttribute("err", new Integer(error).toString());

            Query q = em.createNamedQuery("CategoriaTalentoModeloJugador.findAll");
            List<CategoriaTalentoModeloJugador> lista = q.getResultList();

            int ant_modelo_id=-1;
            Element elemento_modelo = null;
            if (!lista.isEmpty()) {
                for ( int i=0;i< lista.size(); i++) {
                    CategoriaTalentoModeloJugador row = lista.get(i);

                    if ( row.getCategoriaTalentoModeloJugadorPK().getModeloId() != ant_modelo_id ) {
                        elemento_modelo= new Element("modelo");
                        elemento_modelo.setAttribute("id", String.valueOf(row.getCategoriaTalentoModeloJugadorPK().getModeloId()));
                        //if ( ant_modelo_id != -1)
                        root.addContent(elemento_modelo);
                        ant_modelo_id = row.getCategoriaTalentoModeloJugadorPK().getModeloId();
                    }

                    Element hijo = new Element("categoria");
                    hijo.setAttribute("id", String.valueOf(row.getCategoriaTalentoModeloJugadorPK().getCatTalento()));
                    elemento_modelo.addContent(hijo);
                }
            }

            
            doc=new Document(root);//Creamos el documento
            doc.setDocType(null);
            out=new XMLOutputter();
        } catch (Exception e) {
            try { em.getTransaction().rollback(); } catch (Exception e2) { }
            log.error("[consultarTalentos]: " , e);
        } finally {
            try { em.close(); } catch (Exception e) { } 
        }

        return out.outputString(doc);
    }

    public String consultarEscuelas ( HttpServletRequest request, HttpServletResponse response) {
    // Consulta para el servidor de juego donde devolvemos el identificador de cada escuela y el
    // identificador de cada modelo de jugador al que pertenece

        EntityManager   em          = null;
        XMLOutputter    out         = null;
        Document        doc         = null;
        int             error       = 0;
        short           id          = 0;

        log.debug("[consultarEscuelas Inicio]: " );
        try {
            em = emfTienda.createEntityManager(); 

            // componemos el xml 
            Element root=new Element("consultarEscuelas");
            root.setAttribute("err", new Integer(error).toString());

            Query q = em.createNamedQuery("MJugador.findAll");
            List<MJugador> lista = q.getResultList();

            if (!lista.isEmpty()) {
                for ( int i=0;i< lista.size(); i++) {
                    MJugador row = lista.get(i);

                    Element elemento = new Element("m_jugador");

                    elemento.setAttribute("id",             String.valueOf(row.getId    ()));
                    elemento.setAttribute("escuela_id",     String.valueOf(row.getEscuela().getId()));
                    root.addContent(elemento);
                }
            }

            doc=new Document(root);//Creamos el documento
            doc.setDocType(null);
            out=new XMLOutputter();
        } catch (Exception e) {
            try { em.getTransaction().rollback(); } catch (Exception e2) { }
            log.error("[consultarTalentos]: " , e);
        } finally {
            try { em.close(); } catch (Exception e) { } 
        }

        return out.outputString(doc);
    }

    public String consultarRopas ( HttpServletRequest request, HttpServletResponse response) {
    // Consulta para el servidor de juego donde devolvemos el identificador de cada ropa y el campo cuando

        EntityManager   em          = null;
        XMLOutputter    out         = null;
        Document        doc         = null;
        int             error       = 0;
        short           id          = 0;

        log.debug("[consultarRopas Inicio]: " );
        try {
            em = emfTienda.createEntityManager(); 

            // componemos el xml 
            Element root=new Element("consultarRopas");
            root.setAttribute("err", new Integer(error).toString());

            Query q = em.createNamedQuery("Ropa.findAll");
            List<Ropa> lista = q.getResultList();

            if (!lista.isEmpty()) {
                for ( int i=0;i< lista.size(); i++) {
                    Ropa row = lista.get(i);

                    Element elemento = new Element("ropa");

                    elemento.setAttribute("id",         String.valueOf(row.getId    ()));
                    elemento.setAttribute("cuando",     String.valueOf(row.getCuando()));
                    root.addContent(elemento);
                }
            }

            doc=new Document(root);//Creamos el documento
            doc.setDocType(null);
            out=new XMLOutputter();
        } catch (Exception e) {
            try { em.getTransaction().rollback(); } catch (Exception e2) { }
            log.error("[consultarRopas]: " , e);
        } finally {
            try { em.close(); } catch (Exception e) { } 
        }

        return out.outputString(doc);
    }

    public String consultarTraits ( HttpServletRequest request, HttpServletResponse response) {
        EntityManager   em          = null;
        XMLOutputter    out         = null;
        Document        doc         = null;
        int             error       = 0;
        
        log.debug("[consultarTraits Inicio]: " );
        try {
            em = emfTienda.createEntityManager();

            // componemos el xml
            Element root=new Element("consultarTraits");
            root.setAttribute("err", new Integer(error).toString());

            Query q = em.createNamedQuery("Trait.findAll");
            List<Trait> lista = q.getResultList();

            if (!lista.isEmpty()) {
                for ( int i=0;i< lista.size(); i++) {
                    Trait row = lista.get(i);

                    Element elemento = new Element("trait");

                    elemento.setAttribute("id",     String.valueOf(row.getId            ()));
                    elemento.setAttribute("name",   String.valueOf(row.getNombre        ()));
                    elemento.setAttribute("lvl",    String.valueOf(row.getNivel         ()));
                    elemento.setAttribute("dur",    String.valueOf(row.getDuracion      ()));
                    elemento.setAttribute("eft",    String.valueOf(row.getEfectoTipo    ()));
                    elemento.setAttribute("efv",    String.valueOf(row.getEfectoValor   ()));
                    elemento.setAttribute("cua",    String.valueOf(row.getCuando        ()));
                    root.addContent(elemento);
                }
            }

            doc=new Document(root);//Creamos el documento
            doc.setDocType(null);
            out=new XMLOutputter();
        } catch (Exception e) {
            try { em.getTransaction().rollback(); } catch (Exception e2) { }
            log.error("[consultarTraits]: " , e);
        } finally {
            try { em.close(); } catch (Exception e) { } 
        }

        return out.outputString(doc);
    }
    
    
    public String traducciones ( HttpServletRequest request, HttpServletResponse response) {
    // Consulta para que los clientes tengan todos los items de la base de datos
    // con su traducción de trabajo, que luego será localizada al resto de idiomas
    //
        EntityManager   em          = null;
        int             error       = 0;
        short           id          = 0;
        String          salida      = null;
        Query           q           = null;

        log.debug("[traducciones Inicio 2]: " );
        try {
            em = emfTienda.createEntityManager();

            // componemos la salida

            salida= "1|2000|Tatuaje\n" +
                    "1|2001|Zapatilla\n" +
                    "1|2002|Muñequera\n" +
                    "1|2003|Brazalete\n";

            // ROPAS
            //Query q = em.createNamedQuery("Ropa.findAll");
            q = em.createQuery("SELECT x FROM Ropa x order by x.id");
            List<Ropa> lista = q.getResultList();
            if (!lista.isEmpty()) {
                for ( int i=0;i< lista.size(); i++) {
                    Ropa row = lista.get(i);

                    salida+= "11|";
                    salida+= String.valueOf(row.getId    ()) + "|";
                    salida+= String.valueOf(row.getNombre()) + "\n";
                }
                for ( int i=0;i< lista.size(); i++) {
                    Ropa row = lista.get(i);

                    salida+= "12|";
                    salida+= String.valueOf(row.getId    ()) + "|";
                    salida+= String.valueOf(row.getDescripcion()) + "\n";
                }
            }

            // MODELOS DE CARTAS
            // q = em.createNamedQuery("MCarta.findAll");
            q = em.createQuery("SELECT x FROM MCarta x order by x.id");
            List<MCarta> lista_m_carta = q.getResultList();
            if (!lista_m_carta.isEmpty()) {
                for ( int i=0;i< lista_m_carta.size(); i++) {
                    MCarta row = lista_m_carta.get(i);

                    salida+= "22|";
                    salida+= String.valueOf(row.getId    ()) + "|";
                    salida+= String.valueOf(row.getNombre()) + "\n";
                }
            }

            // CARTAS
            // q = em.createNamedQuery("Carta.findAll");
            q = em.createQuery("SELECT x FROM Carta x order by x.id");
            List<Carta> lista_carta = q.getResultList();
            if (!lista_carta.isEmpty()) {
                for ( int i=0;i< lista_carta.size(); i++) {
                    Carta row = lista_carta.get(i);

                    salida+= "23|";
                    salida+= String.valueOf(row.getId    ()) + "|";
                    salida+= String.valueOf(row.getDescripcion()) + "\n";
                }
                for ( int i=0;i< lista_carta.size(); i++) {
                    Carta row = lista_carta.get(i);
                    if ( row.getNombre() != null ){
                        salida+= "24|";
                        salida+= String.valueOf(row.getId    ()) + "|";
                        salida+= String.valueOf(row.getNombre()) + "\n";
                    }
                }
            }

            // SOBRE
            // q = em.createNamedQuery("Sobre.findAll");
            q = em.createQuery("SELECT x FROM Sobre x order by x.id");
            List<Sobre> lista_sobre = q.getResultList();
            if (!lista_sobre.isEmpty()) {
                for ( int i=0;i< lista_sobre.size(); i++) {
                    Sobre row = lista_sobre.get(i);

                    salida+= "25|";
                    salida+= String.valueOf(row.getId    ()) + "|";
                    salida+= String.valueOf(row.getNombre()) + "\n";
                }
            }
            {
                // UNIFORMES
                q = em.createQuery("SELECT x FROM Objeto x where x.tipo=11 order by x.id");
                List<Objeto> lista_objeto = q.getResultList();
                if (!lista_objeto.isEmpty()) {
                    for ( int i=0;i< lista_objeto.size(); i++) {
                        Objeto row = lista_objeto.get(i);

                        salida+= "29|";
                        salida+= String.valueOf(row.getId    ()) + "|";
                        salida+= String.valueOf(row.getNombre()) + "\n";
                    }
                }
                // BALONES
                q = em.createQuery("SELECT x FROM Objeto x where x.tipo=12 order by x.id");
                lista_objeto = q.getResultList();
                if (!lista_objeto.isEmpty()) {
                    for ( int i=0;i< lista_objeto.size(); i++) {
                        Objeto row = lista_objeto.get(i);

                        salida+= "28|";
                        salida+= String.valueOf(row.getId    ()) + "|";
                        salida+= String.valueOf(row.getNombre()) + "\n";
                    }
                }

            }

            //q = em.createNamedQuery("CartaObjeto.findAll");
            q = em.createQuery("SELECT x FROM Gashaball x order by x.id");
            List<Gashaball> lista_gashaball = q.getResultList();
            if (!lista_gashaball.isEmpty()) {
                for ( int i=0;i< lista_gashaball.size(); i++) {
                    Gashaball row = lista_gashaball.get(i);

                    salida+= "27|";
                    salida+= String.valueOf(row.getId         ()) + "|";
                    salida+= String.valueOf(row.getNombre     ()) +  "\n";
                }
            }

            // TRAITS
            q = em.createQuery("SELECT x FROM Trait x order by x.id");
            List<Trait> lis_trait = q.getResultList();
            if (!lis_trait.isEmpty()) {
                for ( int i=0;i< lis_trait.size(); i++) {
                    Trait row = lis_trait.get(i);
                    salida+= "30|";
                    salida+= String.valueOf(row.getId    ()) + "|";
                    salida+= String.valueOf(row.getNombre()) + "\n";
                }
                for ( int i=0;i< lis_trait.size(); i++) {
                    Trait row = lis_trait.get(i);
                    salida+= "34|";
                    salida+= String.valueOf(row.getId    ()) + "|";
                    salida+= String.valueOf(row.getDescripcion()) + "\n";
                }                
            }            

            // MODELOS DE JUGADOR
            //q = em.createNamedQuery("MJugador.findAll");
            q = em.createQuery("SELECT x FROM MJugador x order by x.id");
            List<MJugador> lis_m_jugador = q.getResultList();
            if (!lis_m_jugador.isEmpty()) {
                for ( int i=0;i< lis_m_jugador.size(); i++) {
                    MJugador row = lis_m_jugador.get(i);
                    salida+= "31|";
                    salida+= String.valueOf(row.getId    ()) + "|";
                    salida+= String.valueOf(row.getDescripcion()) + "\n";
                }
            }

            // TALENTO
            q = em.createQuery("SELECT x FROM Talento x order by x.id");
            List<Talento> lis_talento = q.getResultList();
            if (!lis_talento.isEmpty()) {
                for ( int i=0;i< lis_talento.size(); i++) {
                    Talento row = lis_talento.get(i);

                    salida+= "32|";
                    salida+= String.valueOf(row.getId    ()) + "|";
                    salida+= String.valueOf(row.getNombre()) + "\n";
                }
                for ( int i=0;i< lis_talento.size(); i++) {
                    Talento row = lis_talento.get(i);

                    salida+= "33|";
                    salida+= String.valueOf(row.getId    ()) + "|";
                    salida+= String.valueOf(row.getDescripcion()) + "\n";
                }
            }

salida+="41|1|Este equipo se caracteriza por jugar con una fórmula 'freestyle', basándose menos en el juego de equipo y más en su potencia como jugadores individuales dando unos resultados excelentes a la hora de establecer una alta puntuación.\n";
salida+="41|2|Este equipo destaca por su rapidez y astucia, bombardeando a sus oponentes con elevadas habilidades tanto ofensivas como defensivas. Todos sus jugadores son intrépidos y sorprendentes como zorros.\n";
salida+="41|3|Los jugadores de este equipo son brillantes estrategas que saben explotar al máximo sus habilidades. Aunque están en la media en su mayoría de las características su excelente juego en equipo les hace brillar como auténticas estrellas sobre el terreno de juego.\n";
salida+="41|4|La fortaleza principal de este equipo es la defensa; su gran habilidad para detener a los jugadores enemigos provoca la desesperación en sus adversarios, reaccionando al momento con fuertes contraataques que aseguran la victoria.\n";


            // REGION
            q = em.createQuery("SELECT x FROM Region x order by x.id");
            List<Region> lis_region = q.getResultList();
            if (!lis_region.isEmpty()) {
                for ( int i=0;i< lis_region.size(); i++) {
                    Region row = lis_region.get(i);

                    salida+= "42|";
                    salida+= String.valueOf(row.getId    ()) + "|";
                    salida+= String.valueOf(row.getNombre()) + "\n";
                }
            }
            // ZONA
            q = em.createQuery("SELECT x FROM Zona x order by x.id");
            List<Zona> lis_zona = q.getResultList();
            if (!lis_zona.isEmpty()) {
                for ( int i=0;i< lis_zona.size(); i++) {
                    Zona row = lis_zona.get(i);

                    salida+= "43|";
                    salida+= String.valueOf(row.getId    ()) + "|";
                    salida+= String.valueOf(row.getNombre()) + "\n";
                }
            }


        } catch (Exception e) {
            log.error("[traducciones]: " , e);
        } finally {
            try { em.close(); } catch (Exception e) { } 
        }
        return salida;
    }

    public String wsConsultarConfig ( HttpServletRequest request, HttpServletResponse response) {

        EntityManager   em          = null;
        XMLOutputter    out         = null;
        Document        doc         = null;
        int             error       = 0;
        int             equipo_id   = -1;
        Element         root        = null;
        log.debug("[ConsultarConfig]");

        try {
            // Creamos el documento
            root=new Element("consultarConfig");
            
            em = emfTienda.createEntityManager(); 
            root.setAttribute("err", new Integer(error).toString());
            
            {
                Query q = em.createNamedQuery("Region.findAll");
                List<Region> lista = q.getResultList();

                if (!lista.isEmpty()) {
                    for ( int i=0;i< lista.size(); i++) {
                        Region row = lista.get(i);

                        Element elemento = new Element("reg");
                        elemento.setAttribute("id",     String.valueOf(row.getId            ()));
                        elemento.setAttribute("name",   String.valueOf(row.getNombre        ()));
                        root.addContent(elemento);
                    }
                }
            }
            {
                int juego_id = 0;
                Query q = em.createNamedQuery("RegionZona.findByJuego");
                if ( request.getParameter("juego_id") != null ) {
                    juego_id = Integer.parseInt(request.getParameter("juego_id"));
                }
                q.setParameter("juego_id", juego_id);                
                
                List<RegionZona> lista = q.getResultList();

                if (!lista.isEmpty()) {
                    for ( int i=0;i< lista.size(); i++) {
                        RegionZona row = lista.get(i);

                        Element elemento = new Element("rz");
                        elemento.setAttribute("reg_id",    String.valueOf(row.getRegionId        ()));
                        //elemento.setAttribute("zon_id",    String.valueOf(row.getZonaId          ()));
                        elemento.setAttribute("zon_id",    String.valueOf(row.getZona().getId()));
                        elemento.setAttribute("zon_name",  String.valueOf(row.getZona().getNombre()));
                        elemento.setAttribute("ord",       String.valueOf(row.getOrden           ()));
                        root.addContent(elemento);
                    }
                }                
            }
        } catch (Exception e) {
            root.setAttribute("err", new Integer(-1).toString());
            root.setAttribute("desc_error",e.getStackTrace().toString());
            try { em.getTransaction().rollback(); } catch (Exception e2) { }
            log.error("[consultarConfig]: " , e);
        } finally {
            try { em.close(); } catch (Exception e) { } 
        }

        // Componemos el documento
        doc = new Document(root);
        doc.setDocType(null);
        out = new XMLOutputter();       
        return out.outputString(doc);
    }    
    
}
